package com.sky.controller.admin;

import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

/**
 * 通用接口
 */
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {

    @Value("${takeOutFile.fileLocation}")
    private String basePath;

    @Autowired
    private AliOssUtil aliOssUtil;

    /**
     * 文件上传
     * @param file
     * @return
     */
    @PostMapping("/upload")
    @ApiOperation(value = "文件上传")
    public Result<String> upload(MultipartFile file) {
        log.info("文件上传:{}", file);

        try {
            //原始文件名
            String originalFilename = file.getOriginalFilename();
            //截取原始文件名后缀
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            //构造新文件名称
            String objectName = UUID.randomUUID().toString() + extension;

            //文件请求路径,没有阿里云，直接存在本地
//            String filePath = aliOssUtil.upload(file.getBytes(), objectName);

            //这一步相当于把图片从前端上传到服务器，完成该步骤并不能实现图片回显
            File dir = new File(basePath);

            if (!dir.exists()) {
                dir.mkdirs();
            }
            file.transferTo(new File(basePath + objectName));

            return Result.success(objectName);

        } catch (IOException e) {
            log.error("文件上传失败：{}", e);
        }
        return Result.error(MessageConstant.UPLOAD_FAILED);
    }


//    /**
//     * 文件下载
//     * @param name
//     * @param response
//     */
//    @GetMapping("/{name}")
//    public void download(@PathVariable("name") String name, HttpServletResponse response) {
//        log.info("本地做服务器实现文件回传");
//        //输入流，通过输入流读取文件内容
//        try {
//            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
//
//            //通过输出流将文件协会浏览器，在浏览器展示
//            ServletOutputStream outputStream = response.getOutputStream();
//
//            //设置响应回去的文件类型
//            response.setContentType("image/jpeg");
//
//            int len = 0;
//            byte[] bytes = new byte[1024];
//            while ((len = fileInputStream.read(bytes)) != -1) {
//                outputStream.write(bytes, 0, len);
//                outputStream.flush();
//            }
//
//            outputStream.close();
//            fileInputStream.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//
//    }
}
